# Build recipe for libopus.
#
# Copyright (c) 2018 Markus Tornow, <tornow@riseup.net>.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

program=opus
version=1.3
release=1

# Set 'outdir' for a nice and well-organized output directory
outdir="${outdir}/${arch}/audio"

tarname=${program}-${version}.tar.gz

# Remote source(s)
fetch=http://archive.mozilla.org/pub/opus/opus-1.3.tar.gz

description="
Opus Interactive Audio Codec.

Opus is a totally open, royalty-free, highly versatile audio codec. Opus is unmatched for interactive speech and music transmission over the Internet, but is also intended for storage and streaming applications. It is standardized by the Internet Engineering Task Force (IETF) as RFC 6716 which incorporated technology from Skype’s SILK codec and Xiph.Org’s CELT codec.

Technology
Opus can handle a wide range of audio applications, including Voice over IP, videoconferencing, in-game chat, and even remote live music performances. It can scale from low bitrate narrowband speech to very high quality stereo music. 

Supported features are:
• Bitrates from 6 kb/s to 510 kb/s
• Sampling rates from 8 kHz (narrowband) to 48 kHz (fullband)
• Frame sizes from 2.5 ms to 60 ms
• Support for both constant bitrate (CBR) and variable bitrate (VBR)
• Audio bandwidth from narrowband to fullband
• Support for speech and music
• Support for mono and stereo
• Support for up to 255 channels (multistream frames)
• Dynamically adjustable bitrate, audio bandwidth, and frame size
• Good loss robustness and packet loss concealment (PLC)
• Floating point and fixed-point implementation

You can read the full specification, including the reference implementation, in RFC 6716. 
"

homepage=http://www.opus-codec.org/
license="BSD-licensed"

# Source documentation
docs="AUTHORS ChangeLog COPYING INSTALL NEWS README "
docsdir="${docdir}/${program}-${version}"

build()
{
    set -e

    unpack "${tardir}/$tarname"

    cd "$srcdir"

    ./configure CFLAGS="$QICFLAGS" LDFLAGS="$QILDFLAGS" \
     $configure_args \
     --libdir=/usr/lib${libSuffix} \
     --infodir=$infodir \
     --mandir=$mandir \
     --docdir=$docdir \
     --build="$(cc -dumpmachine)"

    make -j${jobs} V=1
    make -j${jobs} DESTDIR="$destdir" install

    # Compress info documents deleting index file for the package
    if test -d "${destdir}/$infodir"
    then
        rm -f "${destdir}/${infodir}/dir"
        lzip -9 "${destdir}/${infodir}"/*
    fi

    # Compress and link man pages (if needed)
    if test -d "${destdir}/$mandir"
    then
        (
            cd "${destdir}/$mandir"
            find . -type f -exec lzip -9 '{}' +
            find . -type l | while read -r file
            do
                ln -sf "$(readlink -- "$file").lz" "${file}.lz"
                rm -- "$file"
            done
        )
    fi

    # Copy documentation
    mkdir -p "${destdir}${docsdir}"
    cp -p $docs "${destdir}${docsdir}/"
}


